/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package controle.regradenegocio;

import java.util.ArrayList;
import java.util.List;
import modelo.Linha;
import modelo.Pedido;
import modelo.Produto;
import modelo.TipoDePagamento;

/**
 *
 * @author Luiz Cunha
 */
public class ProdutoUtils
{

 

    public static void atualizaValorTotalDoPedido(Pedido pedido)
    {
        pedido.setValorTotal(getValorTotalPedido(pedido));
    }

    private static Boolean isVarejo(Pedido pedido)
    {
        Boolean isVarejo;
        if (pedido.getCliente() == null)
        {
            isVarejo = true;
        }
        else
        {
            isVarejo = false;
        }
        return isVarejo;
    }

    private static Double getValorTotalPedido(Pedido pedido)
    {
        Double valorDoPedido = 0.00;
        List<Linha> linhas = pedido.getLinhas();
        for (Linha linha : linhas)
        {
            if (isVarejo(pedido))
            {
                valorDoPedido += linha.getProduto().getPrecoVarejo();
            }
            else
            {
                valorDoPedido += linha.getProduto().getPrecoRevenda();
            }
        }
        return valorDoPedido;
    }

    public static Produto getProdutoMaisVendidoDoPedido(Pedido pedido, Integer quantidadeDesseProduto)
    {
        Produto produtoMaisVendido = new Produto();

        for (Linha linha : pedido.getLinhas())
        {
            if (linha.getQuantidade() > quantidadeDesseProduto)
            {
                quantidadeDesseProduto = linha.getQuantidade();
                produtoMaisVendido = linha.getProduto();
            }
        }
        return produtoMaisVendido;
    }

    public static List<Pedido> geraRelatorioDePedidosPorTipoDePagamento(TipoDePagamento tipoDePagamento, List<Pedido> listaDePedidos)
    {
        List<Pedido> tempList = new ArrayList<>();
        for (Pedido pedido : listaDePedidos)
        {
            if (pedido.getTipoDePagamento().getIdTipoDePagamento() == tipoDePagamento.getIdTipoDePagamento())
            {
                tempList.add(pedido);
            }
        }
        return tempList;
    }
    
    private static boolean isProdutoOnList(Produto produto, List<Produto> produtos)
    {
        for (Produto produto1 : produtos)
        {
            if(produto1.getIdProduto().equals(produto.getIdProduto()))
                return true;
        }
        return false;
    }
    
    private static List<Produto> getUniqueProdutos(List<Pedido> pedidos)
    {
      
        List<Produto> uniqueProdutos = new ArrayList<>();
        
        for(Pedido pedido : pedidos)
        {
            for(Linha linha : pedido.getLinhas())
            {
               if( !isProdutoOnList(linha.getProduto(), uniqueProdutos))
                   uniqueProdutos.add(linha.getProduto());             
            }
        }
        return uniqueProdutos;
    }
    
    private static Integer getProdutoUnicoIndice(List<QuantidadeDeProduto> lista, Produto produto)
    {
        for (int i = 0; i < lista.size(); i++)
        {
            if(lista.get(i).getProduto().getIdProduto().equals(produto.getIdProduto()))
                return i;
        }
        return null;
    }
    
    private static List<QuantidadeDeProduto> setupListaDeQuantidadeDeProduto(List<Pedido> pedidos)
    {
        List<Produto> uniqueProdutos = getUniqueProdutos(pedidos);
        List<QuantidadeDeProduto> quantidadeDeProdutosUnicos = new ArrayList<>();
        
        for (Produto produto : uniqueProdutos)
        {
            quantidadeDeProdutosUnicos.add(new QuantidadeDeProduto(produto, 0));
        }
        return quantidadeDeProdutosUnicos;
    }
    
    public static List<QuantidadeDeProduto> getQuantidadeDeProdutosUnicos(List<Pedido> pedidos)
    {
        List<QuantidadeDeProduto> produtosUnicos = setupListaDeQuantidadeDeProduto(pedidos);
        
        for(Pedido pedido : pedidos)
        {
            for(Linha linha : pedido.getLinhas())
            {
                produtosUnicos.get(getProdutoUnicoIndice(produtosUnicos, linha.getProduto())).addQuantidade(linha.getQuantidade());
            }
        }
        return produtosUnicos;
    }
}
